package com.atguigu.reducejoin;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;

public class RJMapper extends Mapper<LongWritable, Text,OrderBean, NullWritable> {

    /*
        代码块 -- 只调用一次
        构造器 -- 只调用一次
     */
    //文件的名字
    private String fileName;
    //写出的key
    private OrderBean outKey = new OrderBean();


    /*
        在任务开始前调用一次。在map方法执行前调用。
        作用 ：初始化资源
     */
    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        //获取切片信息
        FileSplit fs = (FileSplit) context.getInputSplit();
        fileName = fs.getPath().getName();
    }


    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //1.将Text转成String
        String line = value.toString();
        //2.切割数据
        String[] split = line.split("\t");
        //3.封装数据
        if ("order.txt".equals(fileName)){
            outKey.setId(Integer.parseInt(split[0]));
            outKey.setPid(Integer.parseInt(split[1]));
            outKey.setAmount(Integer.parseInt(split[2]));
            //因为pname会参与排序所以值一定不能为null
            outKey.setPname("");
        }else if ("pd.txt".equals(fileName)){
            outKey.setPid(Integer.parseInt(split[0]));
            outKey.setPname(split[1]);
        }
        //4.将Key,value写出去
        NullWritable nullWritable = NullWritable.get();
        context.write(outKey,nullWritable);
    }


    /*
      在任务结束的时调用一次。在map方法执行后执行。
      作用：关闭资源
   */
    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {

    }

}
